# coding:utf-8

# python模块是一个.py结尾的python文件，包含了python对象定义和python语句
# 模块可以有逻辑的组织python代码
# 把相关的代码分配到一个模块里，能让代码更好用
# 模块能定义函数，类和变量，模块里也能包含可执行的代码

# 模块的引用
# import module1,module2
# 比如要引用模块math，就可以在文件最开始的地方用import math来引入，在调用math模块中的函数时的引用方式：
# 模块名.函数名

# from...import语句
# python的from语句可以从模块中导入指定的一部分到当前命名空间
# from modname import name1,name2

# from...import*语句
# 把一个模块的所有内容全部导入当前的命名空间
# 导入一个模块中的所有项目，然而这种声明不该被过多的使用

# 搜索路径
# 当导入一个模块，python解析器对模块位置的搜索顺序是：
#   当前目录
#   如果不在当前目录，python则搜索在shell变量PYTHONPATH下的每个目录
#   如果都找不到，Python会查看默认路径，UNIX下，默认路径为/usr/local/lib/python/

# 如果要给函数内的全局变量赋值，必须使用global语句

import math

# dir()函数返回在一个模块中定义的所有模块、变量、函数
content = dir(math)
print(content)
# ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2',
#  'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial',
# 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp',
#  'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan',
# 'tanh', 'trunc']


# 如果在函数内部调用globals()，返回所有在函数内能访问的全局名字
# 如果在函数内部调用locals()，返回所有在函数内能访问的命名空间


# reload()函数：当一个模块被导入到一个脚本，模块顶层的代码只会被执行一次，该函数会重新导入之前导入过的模块

# python中的包
#   包是一个分层次的文件目录结构，定义了一个模块以及子包、子包下的子包等
#   包就是文件夹，但是该文件夹下必须存在__init__.py文件，该文件的内容可以为空。__init__.py用于标识当前文件夹是一个包
#
